home *** CD-ROM | disk | FTP | other *** search
- #include "ufk.h"
-
- /*
- * s p a r
- *
- * Fill the data array with my send-init parameters
- *
- */
-
- spar(data,len)
- char data[];
- int *len;
- {
- data[0] = tochar(maxpacksiz); /* Biggest packet I can receive */
- data[1] = tochar(mytime); /* When I want to be timed out */
- data[2] = tochar(mypad); /* How much padding I need */
- data[3] = ctl(mypchar); /* Padding character I want */
- data[4] = tochar(myeol); /* End-Of-Line character I want */
- data[5] = myquote; /* Control-Quote character I send */
- if ((data[6] = myeightquote) == 0)
- data[6] = 'N'; /* No eight bit quoting */
- else if (config > 3) /* 8 bits link */
- data[6] = 'Y'; /* 8th bit quoting on request */
- data[7] = myblock_check_type + '0'; /* Type of block check */
- if ((data[8] = myrptquote) == 0) /* Repeat count quote character */
- data[8] = ' '; /* No repeat quoting done */
- *len = 10;
- if (allowattr)
- data[9] = tochar(0x08); /* Set capability bit for attr */
- else
- data[9] = tochar(0); /* Not used */
- if (maxpacksiz > 94) /* Use extended packet length ? */
- {
- data[0] = tochar(I_MYPACKSIZE); /* Use default if long packets */
- data[9] = tochar(0x0a); /* Set capability bit for this */
- data[10] = tochar(0); /* No sliding windows */
- data[11] = tochar(maxpacksiz / 95); /* Send packet length */
- data[12] = tochar(maxpacksiz % 95);
- *len = 13; /* Count all this */
- }
- data[*len] = '\0'; /* For debug printout */
- }
-
-
- /* r p a r
- *
- * Get the other host's send-init parameters
- *
- */
-
- rpar(data,len)
- char data[];
- int len;
- {
- char c;
-
- if (len > 0)
- spsiz = unchar(data[0]); /* Maximum send packet size */
- else
- spsiz = I_MYPACKSIZE; /* Use default */
- if (len > 1)
- timint = unchar(data[1]); /* When I should time out */
- else
- timint = I_MYTIME;
- if (len > 2)
- pad = unchar(data[2]); /* Number of pads to send */
- else
- pad = I_MYPAD;
- if (len > 3)
- padchar = ctl(data[3]); /* Padding character to send */
- else
- padchar = I_MYPCHAR;
- if (len > 4)
- eol = unchar(data[4]); /* EOL character I must send */
- else
- eol = I_MYEOL;
- if (len > 5)
- quote = data[5]; /* Incoming data quote character */
- else
- quote = I_MYQUOTE;
- if (len > 6)
- {
- if ((c = data[6]) == 'N')
- eight_quote = 0; /* Don't use eight_bit quoting */
- else if (c == 'Y')
- {
- if (config <= 3) /* 7 bits link */
- eight_quote = myeightquote; /* Use default */
- else
- eight_quote = 0; /* Don't use it */
- }
- else
- eight_quote = c; /* Use this char for eight bit quoting */
- }
- else
- eight_quote = 0; /* Don't use it */
- if ((len > 7) && ((c = data[7] - '0') == myblock_check_type))
- block_check_type = c; /* Setup block check type */
- else
- block_check_type = I_BLOCKCHECKTYPE;/* Set initial value */
- if ((len > 8) && ((c = data[8]) == myrptquote) && (c != ' '))
- repeat_quote = c; /* Setup repeat quote character */
- else
- repeat_quote = 0; /* Don't use repeat quoting */
- if (len > 9)
- {
- if ((unchar(data[9]) & 0x08) && /* Check for attribute packets */
- allowattr)
- attribute = TRUE; /* We can handle it */
- if (unchar(data[9]) & 0x02)
- { /* The remote kermit can handle extended length packets */
- c = 9; /* Check for more capability bytes */
- while (c < len)
- if (!(unchar(data[c++]) & 0x01))
- break; /* End of capability bytes */
- spsiz = maxpacksiz; /* Use default */
- if (maxpacksiz > 94) /* Do I want extended length ? */
- { /* Yes */
- if ((c == len) || (c == (len - 1))) /* No length specified */
- spsiz = I_DEFLONGSIZE; /* Use default long size */
- else
- {
- c++; /* Skip window size (not implemented) */
- spsiz = 95 * unchar(data[c]) + /* Re-construct packet length */
- unchar(data[c+1]);
- }
- }
- }
- }
- disp_params(); /* Show all selected parameters */
- }
-
- alloc_pkt(type)
- char type;
- {
- char *p, *q, *malloc();
-
- dealloc_pkt(); /* Get rid of old memory */
- if (((p = malloc(BIG_SIZE)) == NULL) || /* Allocate packet buffers */
- ((q = malloc(SMALL_SIZE)) == NULL)) /* for send and receive */
- {
- prterr(ER_NOMEM); /* No memory */
- return(FALSE);
- }
- if (type == RECEIVE)
- {
- recpkt = p; /* Receive buffer is large */
- sndpkt = q; /* Send buffer is small */
- }
- else if (type == SEND)
- {
- recpkt = q; /* Receive buffer is small */
- sndpkt = p; /* Send buffer is large */
- }
- return (TRUE);
- }
-
- dealloc_pkt()
- {
- if (recpkt) /* De-allocate use receive packet */
- {
- free(recpkt);
- recpkt = 0;
- }
- if (sndpkt) /* De-allocate used send packet */
- {
- free(sndpkt);
- sndpkt = 0;
- }
- }
-
- set_default_comm()
- {
- eol = myeol; /* EOL for outgoing packets */
- quote = myquote; /* Standard control-quote char "#" */
- pad = mypad; /* No padding */
- padchar = mypchar; /* Use null if any padding wanted */
- timint = mytime; /* Timeout value */
- eight_quote = myeightquote; /* Set eight_bit quote character */
- repeat_quote = myrptquote; /* Set repeat quote character */
- block_check_type = I_BLOCKCHECKTYPE; /* Set initial value */
- attribute = FALSE; /* No attribute packets yet */
- binfil = image; /* Reset file type */
- }
-
- disp_params() /* Show parameter settings */
- { /* After negotiation */
- char tmp1, tmp2;
-
- if (debug && screen && (sflg || rflg)) /* Only if sending or receiving */
- {
- posit(0,15);
- printf("Packet length: %4d Timeout: %2d Block check type: %d",
- spsiz, timint, block_check_type);
- posit(0,16);
- printf("End of line: %02x Padding char: %02x Pad count: %2d",
- eol, padchar, pad);
- if ((tmp1 = repeat_quote) == 0)
- tmp1 = 'N';
- if ((tmp2 = eight_quote) == 0)
- tmp2 = 'N';
- posit(0,17);
- printf("Control quote: %c Repeat quote: %c Eight bit quote: %c",
- quote, tmp1, tmp2);
- }
- }
-
- disp_size_transferred()
- {
- float xmitted,
- percentage;
-
- if (!remote && (transmit_chr_count != 0) && screen && !nooutput)
- {
- xmitted = transmit_chr_count / 1024.; /* Size transferred so far in K */
- posit(18,4);
- printf("%6.2f K", xmitted);
- if (sflg || (rflg && attribute && (file_size != 0)))
- {
- percentage = 100. * ((float)transmit_chr_count / (float)file_size);
- posit(39,4);
- printf("%3.0f %%", percentage);
- }
- }
- }
-
- init_xfer()
- {
- chr_sent = dchr_sent = chr_rec = dchr_rec = 0; /* zero counters */
- nak_sent = nak_rec = pack_sent = pack_rec = 0;
- data_rate = 0;
- start_time = time(0);
- }
-
- fin_xfer()
- {
- int numbits;
-
- t_chr_sent += chr_sent; /* adjust performance counters */
- t_dchr_sent += dchr_sent;
- t_nak_sent += nak_sent;
- t_pack_sent += pack_sent;
- t_chr_rec += chr_rec;
- t_dchr_rec += dchr_rec;
- t_nak_rec += nak_rec;
- t_pack_rec += pack_rec;
-
- end_time = time(0); /* Get current time */
-
- /* calculate number of bits in transmission */
-
- numbits = (config == 2 || config == 3 || config == 5) ? 10 : 11;
- if (rflg) /* received data */
- data_rate = (chr_rec / (end_time - start_time)) * (100 / numbits);
- else if (sflg) /* transmitted data */
- data_rate = (chr_sent / (end_time - start_time)) * (100 / numbits);
- t_data_rate = (((t_data_rate == 0) ? data_rate : t_data_rate)
- + data_rate) / 2;
- }
-